package ThreadCurr;

public class SyncDemo2 {
    public static void main(String[] args) {
        Shop shop = new Shop();
        Thread t1= new Thread("唐伯虎"){
            public void run(){
                shop.buy();
            }
        };
        t1.start();

        Thread t2= new Thread("秋香"){
            public void run(){
                shop.buy();
            }
        };
        t2.start();

    }

}
class Shop{
    public void buy(){

       String name =  Thread.currentThread().getName();
        System.out.println(name+"正在挑衣服");
        try {
            Thread.sleep(5000);
              /*
                使用同步块需要指定同步监视器对象，即:上锁的对象
                这个对象可以是java中任何引用类型的实例，只要保证多个需要排队
                执行该同步块中代码的线程看到的该对象是"同一个"即可
             */
                //同步块可以更灵活的控制需要同步执行的代码片段
                //但是同步块要自行指定同步监视器对象
                //同步监视器对象通常使用临界资源(抢谁就锁谁)
            synchronized (this) {
     //      synchronized (new Object()) {//无效
          //  synchronized ("hello") {//可以，但不是合适的锁对象
           // synchronized (new String("hello")){// 不可以 新建对象
                System.out.println(name+"在试衣服");
                Thread.sleep(5000);

            }

            System.out.println(name+"结账离开");
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

    }
}